// 「一本通 1.1 练习 6」糖果传递
/*设最终每个人得到的糖果数为avg,
第i个人逆时针传递给第i-1个人xi个糖果，从第i+1个人哪里得到x(i+1)个糖果
则有avg=a[i]-xi+x(i+1);
即：
avg=a[1]-x1+x2
avg=a[2]-x2+x3
....
avg=a[n]-xn+x1;
则有:
x2=avg-a[1]+x1;
x3=avg-(a[2]-x2)=2*avg-(a[1]+a[2])+x1;
x4=avg-(a[3]-x3)=3*avg-(a[1]+a[2]+a[3])+x1;
........
xn=(n-1)*avg-(a[1]+a[2]+a[3]+...a[n-1])+x1;(容易推出)
设：c[i]=a[1]+a[2]+..+a[i]-i*avg;
所以：
x1=x1-c[0];
x2=x1-c[1];
x3=x1-c[2];
......
xn=x1-c[n-1];

根据题目要求：就需要求出x1+x2+x3+...xn的最小值，也就是求|x1-c[0]|+|x1-c[1]|+|x1-c[2]|+...+|x1-c[n-1]|的最小值;
这是一个典型的数学模型：c数组的所有元素到点x1的距离和最小，当然把x1放在这些数的最中间（即该数列的中位数），其和最小；
综上：主要求average，c数组，中位数，最后求距离之和。*/
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 1000000;
long long a[MAXN + 1], s[MAXN + 1], c[MAXN + 1];
long long avg, ans;
int n;
int main() {
    cin >> n;

    for (int i = 1; i <= n; i++)
        cin >> a[i];

    for (int i = 1; i <= n; i++)
        s[i] = s[i - 1] + a[i];

    avg = s[n] / n;

    for (int i = 1; i <= n; i++)
        c[i] = s[i] - i * avg;

    sort(c, c + n); //只需c[0]到c[n-1];
    long long mid = c[n / 2];

    for (int i = 0; i < n; i++)
        ans += abs(mid - c[i]);

    cout << ans;

}
